package org.example.backend.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.example.backend.common.PageResult;
import org.example.backend.common.Result;
import org.example.backend.dto.PageRequestDTO;
import org.example.backend.entity.WaterProduct;
import org.example.backend.service.WaterProductService;
import org.example.backend.util.FileUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.Valid;
import java.io.IOException;
import java.util.List;

/**
 * 水商品控制器
 */
@RestController
@RequestMapping("/waterProduct")
@CrossOrigin(origins = {"http://localhost:8081"})
@Api(tags = "水商品接口")
public class WaterProductController {

    @Autowired
    private WaterProductService waterProductService;

    @Autowired
    private FileUtil fileUtil;

    /**
     * 分页查询水商品
     *
     * @param pageRequest 分页参数
     * @param brandId     品牌ID
     * @return 分页结果
     */
    @PostMapping("/page")
    @ApiOperation("分页查询水商品")
    public Result<PageResult<WaterProduct>> page(@Valid @RequestBody PageRequestDTO pageRequest, @RequestParam(required = false) Long brandId) {
        Page<WaterProduct> page = new Page<>(pageRequest.getCurrent(), pageRequest.getSize());
        page = waterProductService.pageProduct(page, pageRequest.getKeyword(), brandId);
        return Result.success(PageResult.build(page.getTotal(), page.getSize(), page.getCurrent(), page.getRecords()));
    }

    /**
     * 获取所有水商品
     *
     * @return 水商品列表
     */
    @GetMapping("/list")
    @ApiOperation("获取所有水商品")
    public Result<List<WaterProduct>> list() {
        return Result.success(waterProductService.list());
    }

    /**
     * 获取水商品信息
     *
     * @param id 水商品ID
     * @return 水商品信息
     */
    @GetMapping("/{id}")
    @ApiOperation("获取水商品信息")
    public Result<WaterProduct> getById(@PathVariable Long id) {
        return Result.success(waterProductService.getById(id));
    }

    /**
     * 添加水商品
     *
     * @param waterProduct 水商品信息
     * @return 添加结果
     */
    @PostMapping
    @ApiOperation("添加水商品")
    public Result<?> add(@Valid @RequestBody WaterProduct waterProduct) {
        waterProductService.save(waterProduct);
        return Result.success();
    }

    /**
     * 更新水商品信息
     *
     * @param waterProduct 水商品信息
     * @return 更新结果
     */
    @PutMapping
    @ApiOperation("更新水商品信息")
    public Result<?> update(@Valid @RequestBody WaterProduct waterProduct) {
        waterProductService.updateById(waterProduct);
        return Result.success();
    }

    /**
     * 删除水商品
     *
     * @param id 水商品ID
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    @ApiOperation("删除水商品")
    public Result<?> delete(@PathVariable Long id) {
        waterProductService.removeById(id);
        return Result.success();
    }

    /**
     * 上传水商品图片
     *
     * @param file 文件
     * @return 文件路径
     */
    @PostMapping("/upload")
    @ApiOperation("上传水商品图片")
    public Result<String> upload(@RequestParam("file") MultipartFile file) {
        try {
            String path = fileUtil.uploadFile(file, "product");
            return Result.success(path);
        } catch (IOException e) {
            return Result.error("上传失败：" + e.getMessage());
        }
    }
} 